void main() {
  // 创建自定义类实例作为 Map 键
  final alice = Person('Alice', 30);
  final bob = Person('Bob', 25);
  final aliceCopy = Person('Alice', 30); // 与 alice 内容相同

  // 使用自定义类作为键的 Map
  final map = <Person, String>{alice: 'User1', bob: 'User2'};

  print('原始 Map 内容:');
  map.forEach((key, value) => print('${key.name}: ${value}'));

  // 测试相等性和哈希码
  print('\nalice == aliceCopy: ${alice == aliceCopy}'); // 应输出 true
  print(
    'alice.hashCode == aliceCopy.hashCode: ${alice.hashCode == aliceCopy.hashCode}',
  ); // 应输出 true

  // 使用相同内容的实例访问 Map
  print('\n通过 aliceCopy 访问 Map: ${map[aliceCopy]}'); // 应输出 User1
}

class Person {
  final String name;
  final int age;

  Person(this.name, this.age);

  // 重写 == 方法判断对象相等性
  @override
  bool operator ==(Object other) {
    if (other.runtimeType != runtimeType) return false;
    return other is Person && other.name == name && other.age == age;
  }

  // 重写 hashCode 方法生成唯一哈希码
  @override
  int get hashCode => Object.hash(name, age);

  @override
  String toString() => '$name (年龄: $age)';
}
